home *** CD-ROM | disk | FTP | other *** search
/ Apple II Magazines (PO) / Nibble Volume 09, No. 11 (1988-11)(MicroSPARC)(Side A).zip / Nibble Volume 09, No. 11 (1988-11)(MicroSPARC)(Side A).po / NW.BIN.S < prev    next >
Text File  |  1996-12-24  |  35KB  |  1,404 lines

  1. ***********************
  2. * NW.BIN SOURCE CODE  *
  3. * BY ROBERT T. YUILLE *
  4. * COPYRIGHT (C) 1988  *
  5. * BY MICROSPARC, INC. *
  6. * CONCORD, MA.  01742 *
  7. *                     *
  8. * THE ASSEMBLER V3.1  *
  9. ***********************
  10. *
  11. LN        EQU $19        ; LINE NUMBER
  12. TM        EQU $1A        ; TOP MARGIN
  13. BM        EQU $1B        ; BOTTOM MARGIN
  14. LM        EQU $1C        ; LEFT MARGIN
  15. RM        EQU $1D        ; RIGHT MARGIN
  16. NEWF      EQU $1E        ; NEW FILE FLAG
  17. PRNTF     EQU $E9        ; PRINTER FLAG
  18. MMS       EQU $3C        ; MEM MOVE START ADDR
  19. MME       EQU $3E        ; MEM MOVE END ADDR
  20. MMD       EQU $42        ; MEM MOVE DESTINATION ADDR
  21. CML       EQU $EB        ; LSB OF MEMORY PTR
  22. CMH       EQU $EC        ; MSB OF MEMORY PTR
  23. CURSOR    EQU $ED        ; CURSOR CHARACTER
  24. NXTCSR    EQU $EE        ; NEXT CURSOR CHAR
  25. PPOS      EQU $F9        ; PRINTER POSITION
  26. YLO       EQU $FA        ; Y TEMP AREAS FOR
  27. YHI       EQU $FB        ; WORD MOVES
  28. EFL       EQU $FC        ; END OF FILE - LOW
  29. EFH       EQU $FD        ; & HIGH BYTES
  30. TMP       EQU $FE        ; TEMPORARY
  31. TMP1      EQU $FF        ; BUFFERS
  32. WINDT     EQU $22        ; WINDOW TOP
  33. WINDB     EQU $23        ; WINDOW BOTTOM
  34. CH        EQU $24        ; CURSOR HORIZ POSITION
  35. CV        EQU $25        ; CURSOR VERT POSITION
  36. BASL      EQU $28        ; SCREEN LINE ADDRESS
  37. KBD       EQU $C000      ; KEYBOARD KEY
  38. STROBE    EQU $C010      ; KEYBOARD STROBE
  39. OUTNUM    EQU $ED24      ; PRINT OUT NUMBER
  40. TABV      EQU $FB5B      ; SET BASL
  41. UP        EQU $FC1A      ; REVERSE LINE FEED
  42. HOME      EQU $FC58      ; CLEAR SCREEN
  43. LF        EQU $FC66      ; LINE FEED
  44. CLREOL    EQU $FC9C      ; CLEAR TO END OF LINE
  45. COUT      EQU $FDED      ; OUTPUT CHARACTER
  46. MOVE      EQU $FE2C      ; MEMORY MOVE
  47. BELL      EQU $FF3A      ; RING BELL
  48. *
  49.           ORG  $6600
  50. *
  51. ***************
  52. * START PROGRAM
  53. ***************
  54.           CLD
  55.           JMP ENTRY
  56. FILENAME  DFC 0,0
  57.           ASC "FILE: "
  58.           DFS 16
  59. ENTRY     LDA PRNTF      ; CHECK PRINT FLAG
  60.           BEQ ENT1
  61.           JMP PPRINT
  62. ENT1      JSR HOME
  63.           JSR PREP       ; PREP SCREEN
  64.           JSR HOME
  65.           JSR SETCM      ; SET MEMORY POINTER
  66.           LDA NEWF       ; CHECK FOR TYPE
  67.           BNE ENT2       ; OF ENTRY
  68. NEWDOC    JSR NEWLN      ; MAKE A NEW LINE
  69.           LDY #2
  70.           STY NEWF
  71.           DEY
  72.           STY LLN
  73.           STY FLN
  74.           JMP ENT3
  75. ENT2      CMP #2
  76.           BEQ CURRDOC
  77. LOADOC    LDA #2
  78.           STA NEWF
  79.           JSR SAVALL
  80.           JSR FENDOC     ; FIND END OF DOCUMENT
  81.           STY CRSF
  82.           INY
  83.           STY FLN        ; SET FIRST LINE TO 1
  84.           LDA LN
  85.           STA LLN        ; SET LAST LINE
  86.           JSR PRNTDOC1   ; PUT DOCUMENT ON SCREEN
  87. ENT3      LDY #0
  88.           STY IMODE
  89.           STY CRSF
  90.           JMP CSR1       ; SET CURSOR
  91. CURRDOC   JSR PRNTDOC1
  92.           JMP CSR1
  93. ********************
  94. * GET NEXT KEY PRESS
  95. ********************
  96. NXTKEY    JSR PRNTDOC    ; PRINT DOCUMENT
  97. NXTKEY1   JSR PRNTLC     ; PRINT LINE & COL #'S
  98.           LDA #0         ;--
  99.           STA CRF        ; 0-FLAGS
  100.           STA STOPF      ;--
  101.           JSR KEYIN      ; GET KEYPRESS
  102.           LDY #CMDADR-CMDCODE-1
  103. CMDLP     CMP CMDCODE,Y  ;--
  104.           BEQ CMD        ; CHECK FOR
  105.           DEY            ; COMMANDS
  106.           BPL CMDLP      ;-
  107.           CMP #$A0       ; SCREEN REST OF
  108.           BCS NXK1       ; CONTROL CHARACTERS
  109.           JMP BAD
  110. NXK1      JMP NORMAL     ; CHARACTER FOR DOCUMENT
  111. CMD       TYA            ; FOUND COMMAND
  112.           ASL            ; IN TABLE
  113.           TAY
  114.           LDA CMDADR,Y
  115.           STA TMP
  116.           LDA CMDADR+1,Y
  117.           STA TMP1
  118.           JMP (TMP)      ; GO TO COMMAND
  119. ****************
  120. * CHANGE CURSOR
  121. * INSERT/REPLACE
  122. ****************
  123. CHGCSR    LDA IMODE      ; TOGGLE
  124.           EOR #$80       ; IMODE
  125.           STA IMODE      ; FLAG
  126. CSR1      LDA IMODE      ;--
  127.           BNE CSR2       ; SET
  128.           LDA #$FF       ; CURSOR
  129.           BNE CSR3       ; CHARACTER
  130. CSR2      LDA #$DF       ;
  131. CSR3      STA CURSOR     ;--
  132.           JMP NXTKEY1
  133. ************
  134. * ESCAPE KEY
  135. ************
  136. ESC       JSR SAVALL
  137.           JSR FENDOC     ;--
  138.           JSR NXTLN      ; SET END OF
  139.           LDA CML        ; DOCUMENT
  140.           STA EFL        ; POINTER
  141.           LDA CMH        ;
  142.           STA EFH        ;--
  143.           RTS
  144. *************
  145. * RIGHT ARROW
  146. *************
  147. RARR      JSR CKELN      ; END OF LINE?
  148.           BEQ RA1        ; YES
  149.           INC CH
  150.           JMP NXTKEY1
  151. RA1       JSR CKLMT      ; END OF DOCUMENT?
  152.           BEQ BAD        ; YES
  153.           JSR CKLL0      ; LAST LINE OF DOC?
  154.           BEQ BAD        ; YES
  155.           LDA #0
  156.           STA CH
  157. RA2       JSR CKWINB     ; BOTTOM OF WINDOW?
  158.           BEQ RA3        ; YES
  159.           JSR SETNXTLN   ; GO TO NEXT LINE
  160.           JMP NXTKEY1
  161. RA3       INC FLN        ;--
  162.           JSR NXTLN      ; SCROLL UP
  163.           JMP NXTKEY     ;--
  164. ************
  165. * LEFT ARROW
  166. ************
  167. LARR      LDY CH         ; BEGINNING OF LINE?
  168.           BEQ LA1        ; YES
  169.           DEC CH
  170.           JMP NXTKEY1
  171. LA1       JSR CKLN1      ; FIRST LINE OF DOC?
  172.           BEQ BAD        ; YES
  173.           LDA #39
  174.           STA CH
  175. LA2       JSR CKWINT     ; TOP OF WINDOW?
  176.           BEQ LA3        ; YES
  177.           JSR SETPRELN   ; GO TO PREVIOUS LINE
  178.           JMP NXTKEY1
  179. LA3       DEC FLN        ;--
  180.           JSR PRELN      ; SCROLL DOWN
  181.           JMP NXTKEY     ;--
  182. * BAD ENTRY
  183. BAD       JSR BELL
  184.           JMP NXTKEY1
  185. ************
  186. * DOWN ARROW
  187. ************
  188. DNARR     JSR CKLMT
  189.           BEQ BAD
  190.           JSR CKLL0
  191.           BEQ BAD
  192.           JMP RA2
  193. **********
  194. * UP ARROW
  195. **********
  196. UPARR     JSR CKLN1
  197.           BEQ BAD
  198.           JMP LA2
  199. *
  200. CKLL0     LDY #40
  201.           LDA (CML),Y
  202.           RTS
  203. * TAB
  204. TAB       LDA CH
  205.           CMP #35        ; 35 OR MORE?
  206.           BCS BAD        ; YES
  207.           CMP #5         ; LESS THAN 5?
  208.           BCS TB2        ; NO
  209.           LDA #5
  210.           JMP TB4        ; SET TO 5
  211. TB2       LDA #35        ;--
  212.           STA TMP        ;
  213. TBLP1     SEC            ; FIND
  214.           LDA CH         ; POSITION
  215.           SBC TMP        ; OF CURSOR
  216.           BCS TB3        ;
  217.           SEC            ;
  218.           LDA TMP        ;
  219.           SBC #5         ;
  220.           STA TMP        ;
  221.           JMP TBLP1      ;--
  222. TB3       CLC            ; AND SET TO
  223.           LDA TMP        ; NEXT TAB
  224.           ADC #5         ; POSITION
  225. TB4       STA CH         ;--
  226.           JMP NXTKEY1
  227. *************************************
  228. * MOVE TO FIRST LINE OF DOC, <CTRL>-F
  229. *************************************
  230. FRSTLN    LDA #1
  231.           STA FLN
  232. FST1      JSR SETFLN     ; SET MEM PTR TO FIRST LINE
  233.           JSR HOME
  234.           JMP NXTKEY
  235. *********************************
  236. * MOVE TO CENTER OF DOC, <CTRL>-C
  237. *********************************
  238. CNTRLN    LDA LLN
  239.           LSR
  240.           STA FLN
  241.           JMP FST1
  242. ******************************
  243. * MOVE TO END OF DOC, <CTRL>-L
  244. ******************************
  245. LASTLN    LDY LLN
  246.           DEY
  247.           STY FLN
  248.           JMP FST1
  249. **************
  250. * <CTRL>-Y
  251. * CLEAR TO EOL
  252. **************
  253. CLEAREOL  LDY CH         ;--
  254.           LDA #0         ; FILL REST
  255. CLLP      STA (CML),Y    ; OF MEMORY
  256.           INY            ; FOR LINE
  257.           CPY #40        ; WITH ZEROS
  258.           BNE CLLP       ;--
  259.           JSR SAVALL
  260.           LDA CH
  261.           BNE CLR1
  262.           JMP BLANKLN    ; DELETE BLANK LINE
  263. CLR1      JMP WRAP1      ; WRAP UP
  264. *******************
  265. * <CTRL>-Z - TOGGLE
  266. * DISPLAY OF CR'S
  267. *******************
  268. SHOWCR    LDA CRSF       ; TOGGLE
  269.           EOR #$80       ; CR SHOW
  270.           STA CRSF       ; FLAG
  271.           JMP NXTKEY
  272. *****************
  273. * CARRIAGE RETURN
  274. *****************
  275. RTN       JSR CKLMT      ; DOCUMENT FULL?
  276.           BNE CR1        ; NO
  277.           JMP BAD
  278. CR1       JSR CHECK1     ; FURTHER CHECKS
  279.           LDY CH         ; BEGINNING OF LINE?
  280.           BEQ CR2        ; YES
  281.           JSR CHECK2     ; MORE CHECKS
  282.           JSR CKELN      ; END OF LINE?
  283.           BEQ CR3        ; YES
  284. CR2       JSR CKACSR     ; 0 AFTER CURSOR?
  285.           BNE CR4        ; NO
  286. CR3       INC CRF
  287.           JMP CR8
  288. CR4       JSR GTWRDLN1   ; GET LENGTH TO EOL
  289.           LDY #39
  290. CRLP      JSR CKCRM      ;--
  291.           BNE CR5        ; CARR RTN
  292.           INC CRF        ; IN WORD
  293. CR5       DEY            ; TO BE
  294.           CPY CH         ; MOVED?
  295.           BNE CRLP       ;--
  296.           JSR CKFDOC     ; DOCUMENT FULL?
  297.           BNE CR6        ; NO
  298.           JMP BAD
  299. CR6       JSR MBLANKLN   ; MAKE A BLANK LINE
  300.           LDA IMODE      ; INSERT MODE?
  301.           BNE CR7        ; NO
  302.           DEC WRDLEN     ; ONE LESS CHARACTER
  303. CR7       JSR MOVWRDN    ; MOVE WORD DOWN
  304. CR8       LDY CH         ; PUT
  305.           LDA #$0D       ; CR IN
  306.           STA (CML),Y    ; MEMORY,
  307.           LDA #0         ; MOVE TO
  308.           STA CH         ; BEG OF
  309.           JSR SETNXTLN   ; NEXT LINE
  310.           LDA CRF        ; CR MOVED?
  311.           BEQ CR9        ; NO
  312.           JMP NXTKEY
  313. CR9       JSR SAVALL
  314.           JMP WRAP1      ; WRAP UP
  315. ******************
  316. * DELETE CHARACTER
  317. ******************
  318. DELETE    JSR CKLMT
  319.           BNE DEL1
  320.           JMP BAD
  321. DEL1      JSR CKLN1
  322.           BNE DEL2
  323.           LDY CH
  324.           BNE DEL4
  325.           JMP BAD
  326. DEL2      JSR CKWINT
  327.           BNE DEL3
  328.           DEC FLN        ; SCROLL
  329.           JSR PRNTDOC    ; DOWN
  330.           JSR LF
  331. DEL3      JSR CKWINB
  332.           BNE DEL4
  333.           INC FLN        ; SCROLL
  334.           JSR PRNTDOC    ; UP
  335.           JSR UP
  336. DEL4      LDY KBD
  337.           CPY #$04       ; <CTRL>-D?
  338.           BEQ DEL6
  339.           LDY CH
  340.           BNE DEL5
  341.           JSR SETPRELN   ; MOVE TO END
  342.           LDA #39        ; OF PREVIOUS
  343.           STA CH         ; LINE
  344. DELP1     JSR CKUCSR     ;--
  345.           BNE DEL7       ; MOVE TO
  346.           DEC CH         ; CHARACTER
  347.           JMP DELP1      ;--
  348. DEL5      DEC CH
  349. DEL6      JSR CKUCSR     ; 0 UNDER CURSOR?
  350.           BNE DEL7       ; NO
  351.           JMP NXTKEY1
  352. DEL7      JSR CKELN      ; END OF LINE?
  353.           BEQ DEL8       ; YES
  354.           CMP #$0D       ; CR UNDER CURSOR?
  355.           BNE DELP2      ; NO
  356. DEL8      JSR STOR0M     ; PUT 0 IN MEM
  357.           JSR SAVALL
  358.           LDY CH
  359.           BNE DEL9
  360.           JMP BLANKLN
  361. DEL9      JMP WRAP1
  362. DELP2     INY            ;--
  363.           LDA (CML),Y    ; MOVE REST
  364.           DEY            ; OF LINE TO
  365.           STA (CML),Y    ; LEFT ONE
  366.           CMP #$0D       ; POSITION &
  367.           BNE DEL10      ; CHECK FOR
  368.           INC STOPF      ; CR
  369. DEL10     INY            ;
  370.           CPY #39        ;
  371.           BNE DELP2      ;--
  372.           JSR STOR0M     ; PUT 0 AT EOL
  373.           JSR CKLN1      ; LINE #1?
  374.           BEQ WRAP       ; YES
  375.           LDY #0         ;--
  376. DELP3     LDA (CML),Y    ; GET WORD
  377.           INY            ; LENGTH AT
  378.           CMP #$0D       ; BEGINNING
  379.           BEQ DEL11      ; OF LINE
  380.           CMP #0         ;
  381.           BEQ DEL11      ;
  382.           CMP #$20       ;
  383.           BNE DELP3      ;
  384. DEL11     STY WRDLEN     ;--
  385.           LDA CH         ; CURSOR IN
  386.           CMP WRDLEN     ; FIRST WORD?
  387.           BCS WRAP       ; NO
  388.           JSR PRELN      ; CR IN
  389.           JSR CHKCR      ; PREVIOUS LINE?
  390.           LDA CRF        ;
  391.           BEQ DEL12      ; NO
  392.           LDA #0
  393.           STA CRF
  394.           JSR NXTLN      ; MOVE TO NEXT LINE
  395.           JMP WRAP       ; AND WRAP UP
  396. DEL12     JSR COUNT0     ; COUNT 0'S AT EOL
  397.           JSR NXTLN
  398.           LDA LEN0       ; WILL FIRST WORD FIT
  399.           CMP WRDLEN     ; AT END OF PREVIOUS LINE?
  400.           BCC WRAP       ; NO
  401.           JSR SETPRELN   ;--
  402.           SEC            ; MOVE TO
  403.           LDA #40        ; PREVIOUS LINE,
  404.           SBC WRDLEN     ;
  405.           CLC            ;
  406.           ADC CH         ;
  407.           STA CH         ; SET CH,
  408.           LDA #0         ; RESET
  409.           STA STOPF      ; FLAG,
  410.           JSR SAVALL     ; AND
  411.           JMP WRAP2      ; WRAP UP
  412. **************
  413. * WRAP UP WORD
  414. **************
  415. WRAP      JSR SAVALL
  416.           LDA STOPF      ; STOP FLAG SET?
  417.           BNE DEND       ; YES
  418. WRAP1     JSR CKNXTLN0   ; 0 AT BEG OF NEXT LINE?
  419.           BEQ DEND       ; YES
  420.           JSR CHKWRD     ; ROOM FOR WORD AT
  421.           LDA STOPF      ; END OF LINE?
  422.           BNE DEND       ; NO
  423. WRAP2     JSR MOVWRDUP   ; MOVE WORD UP
  424.           JSR NXTLN      ; FILL IN WHERE
  425.           JSR MOVLNL     ; WORD MOVED
  426.           LDA CRF        ; CR MOVED?
  427.           BNE BLANKLN    ; YES
  428.           LDA STOPF      ; CR ON LINE?
  429.           BNE DEND       ; YES
  430.           JMP WRAP1      ; CONTINUE TO WRAP UP
  431. *
  432. BLANKLN   JSR CKLLN      ; LAST LINE?
  433.           BEQ DEND       ; YES
  434.           JSR CKNXTLN0
  435.           BEQ BLK1
  436.           JSR SETMMD     ;--
  437.           JSR SETMMS     ; SET MEMORY
  438.           JSR FENDOC1    ; POINTERS AND
  439.           JSR SETMME1    ; MOVE MEMORY
  440.           JSR MOVDN      ;--
  441. BLK1      DEC LLN        ; REMOVE LINE FROM END
  442. *
  443. DEND      JSR RESALL
  444.           JMP NXTKEY
  445. ******************
  446. * NORMAL CHARACTER
  447. ******************
  448. NORMAL    JSR CKLMT
  449.           BNE NR1
  450.           JMP BAD
  451. NR1       JSR CKELN
  452.           BNE NR2
  453.           JSR CKFDOC
  454.           BNE NR2
  455.           JMP BAD
  456. NR2       LDA IMODE      ; INSERT MODE?
  457.           BEQ NR3        ; NO
  458.           JSR CK0ELN     ; 0 AT EOL?
  459.           BEQ NR3        ; YES
  460.           JSR CKFDOC     ; DOCUMENT FULL?
  461.           BNE NR3        ; NO
  462.           JMP BAD
  463. NR3       JSR CHECK1
  464.           JSR CKUCSR     ; CR UNDER
  465.           CMP #$0D       ; CURSOR?
  466.           BNE NR4        ; NO
  467.           JMP INSERT
  468. NR4       LDY CH
  469.           BEQ NR8
  470.           JSR CHECK2
  471.           LDA TMP        ; CR TO LEFT OF CURSOR?
  472.           BEQ NR6        ; NO
  473.           JSR CKELN      ; END OF LINE?
  474.           BNE NR5        ; NO
  475.           JSR MBLANKLN   ; MAKE BLANK LINE &
  476.           JSR BNXTLN     ; MOVE TO BEG OF BLANK LINE
  477. NR5       JSR STORENT    ;--
  478.           LDA #$0D       ; STORE ENTRY
  479.           INY            ; & CR IN
  480.           STA (CML),Y    ; MEMORY
  481.           JMP NXTKEY     ;--
  482. NR6       JSR CKELN
  483.           BNE NR8
  484.           LDA IMODE
  485.           BEQ NR7
  486.           JMP INSERT1
  487. NR7       JSR CKSPCK     ; NEW CHAR A SPACE?
  488.           BNE NR10       ; NO
  489.           JSR STORENT
  490.           JSR NXTLN
  491.           JMP NXTKEY
  492. NR8       JSR CKACSR     ; 0 AFTER CURSOR?
  493.           BEQ NR9        ; YES
  494.           LDA IMODE
  495.           BEQ NR9
  496.           JMP INSERT
  497. NR9       JSR STORENT
  498.           JMP NXTKEY1
  499. NR10      STA (CML),Y    ;--
  500.           JSR GETWRDLN   ; MOVE WORD
  501.           JSR MBLANKLN   ; DOWN
  502.           JSR MOVWRDN    ; WITH
  503.           JSR SETNXTLN   ; CURSOR
  504.           LDA WRDLEN     ;
  505.           STA CH         ;--
  506.           JSR SAVALL
  507.           JMP WRAP1
  508. ******************
  509. * INSERT CHARACTER
  510. ******************
  511. INSERT    JSR SAVALL
  512.           JSR CK0ELN     ; 0 AT EOL?
  513.           BNE INS1       ; NO
  514.           JSR MOVLNR1    ; MAKE ROOM FOR
  515.           JSR STORENT    ; NEW CHARACTER
  516.           JMP NXTKEY
  517. INS1      JSR GETWRDLN
  518.           JSR MBLANKLN
  519.           SEC            ;--
  520.           LDA #39        ; CURSOR IN
  521.           SBC WRDLEN     ; WORD TO
  522.           STA TMP        ; BE MOVED?
  523.           INC TMP        ;
  524.           SBC CH         ;--
  525.           BCS INS5       ; NO
  526.           JSR CKSPCK     ; NEW CHAR A SPACE?
  527.           BNE INS2       ; NO
  528.           JSR GTWRDLN1   ; GET REST OF WORD
  529.           JSR MOVWRDN    ; MOVE IT DOWN
  530.           LDY CH
  531.           JSR STRSPCM    ; STORE SPACE
  532.           JSR BNXTLN
  533.           JSR SAVALL
  534.           LDA CRF        ; CR MOVED?
  535.           BNE INS3       ; YES
  536.           JMP WRAP1
  537. INS2      JSR MOVWRDN    ;--
  538.           SEC            ; MOVE WORD,
  539.           LDA CH         ; SET CH,
  540.           SBC TMP        ;
  541.           STA CH         ;
  542.           JSR SETNXTLN   ; MOVE TO NEXT LINE
  543.           JSR MOVLNR1    ; MAKE ROOM
  544.           JSR STORENT    ; FOR NEW CHARACTER
  545.           JSR SAVALL     ;--
  546.           LDA CRF        ; CR MOVED?
  547.           BEQ INS4       ; NO
  548. INS3      JMP DEND
  549. INS4      JMP WRAP1
  550. INS5      JSR MOVWRDN
  551.           JSR MOVLNR1
  552.           JSR STORENT
  553.           JSR SAVALL
  554.           LDA CRF
  555.           BNE INS3
  556.           JSR SETNXTLN
  557.           JMP WRAP1
  558. *
  559. INSERT1   JSR CKUCSR     ; 0 UNDER CURSOR?
  560.           BNE INS7       ; NO
  561.           JSR CKSPCK     ; NEW CHAR A SPACE?
  562.           BNE INS6       ; NO
  563.           JSR STORENT
  564.           JSR NXTLN
  565.           JMP NXTKEY
  566. INS6      JSR SAVALL
  567.           JMP INS1
  568. INS7      JSR SAVALL
  569.           JSR CKSPCK
  570.           BEQ INS8
  571.           JMP INS1
  572. INS8      JSR BNXTLN
  573.           JMP INSERT
  574. **************
  575. * GET KEYPRESS
  576. **************
  577. KEYIN     LDY CURSOR     ; LOAD CURSOR CHAR
  578.           STY YSAV       ; SAVE IT
  579.           LDY CH         ; GET CHAR UNDER
  580.           LDA (BASL),Y   ; CURSOR ON SCREEN
  581.           PHA            ; SAVE IT
  582.           STA NXTCSR     ; SAVE FOR NEXT CURSOR
  583.           LDY YSAV       ; GET BACK CURSOR CHAR
  584.           TYA            ; AND
  585.           LDY CH         ; PUT IT
  586.           STA (BASL),Y   ; ON SCREEN
  587.           PLA
  588. KYLP      PHA
  589.           INC TMP        ;--
  590.           BNE KYN1       ; TIMING
  591.           LDA TMP1       ; FOR
  592.           INC TMP1       ; CURSOR
  593.           EOR TMP1       ; BLINK
  594.           AND #$40       ;
  595.           BEQ KYN1       ;--
  596.           LDY CH         ;--
  597.           LDA (BASL),Y   ; SWITCH
  598.           LDY NXTCSR     ; CURSOR CHARACTER
  599.           STA NXTCSR     ; AND
  600.           TYA            ; CHARACTER
  601.           LDY CH         ; ON SCREEN
  602.           STA (BASL),Y   ;--
  603. KYN1      PLA
  604.           BIT KBD        ; KEY PRESSED?
  605.           BPL KYLP       ; NO
  606.           LDY CH         ; RESTORE ORIGINAL
  607.           STA (BASL),Y   ; SCREEN CHARACTER
  608.           LDA KBD        ; GET KEYPRESS AND
  609.           STA STROBE     ; CLEAR KBD HIGH BIT
  610.           RTS
  611. ****************
  612. * PREPARE SCREEN
  613. ****************
  614. PREP      LDA #FILENAME  ;--
  615.           LDX #FILENAME/ ; PRINT
  616.           JSR MESSAGE    ; FILENAME
  617.           LDA #ESCMSG    ; AND ESCAPE
  618.           LDX #ESCMSG/   ; MESSAGE
  619.           JSR MESSAGE    ;--
  620.           LDA #1
  621.           JSR TABV
  622.           LDY #0         ;--
  623.           LDA #$AD       ; "-"
  624. PELP1     STA (BASL),Y
  625.           INY
  626.           CPY #5
  627.           BNE PELP1
  628. PELP2     LDA #$BA       ; ":"
  629.           STA (BASL),Y
  630.           INY
  631.           LDX #0
  632. PELP3     LDA #$AD       ; PRINT TOP
  633.           STA (BASL),Y   ; AND BOTTOM
  634.           INY            ; LINES
  635.           INX
  636.           CPX #4
  637.           BNE PELP3
  638.           CPY #40
  639.           BNE PELP2
  640.           LDY #0
  641.           LDA #22
  642.           JSR TABV
  643.           LDA #$AD
  644. PELP4     STA (BASL),Y
  645.           INY
  646.           CPY #40
  647.           BNE PELP4      ;--
  648.           LDA #2         ;--
  649.           STA WINDT      ; SET
  650.           LDA #22        ; WINDOWS
  651.           STA WINDB      ;--
  652.           RTS
  653. *************************
  654. * PRINT MESSAGE TO SCREEN
  655. *************************
  656. MESSAGE   STA TMP
  657.           STX TMP1
  658.           LDY #0
  659.           LDA (TMP),Y
  660.           STA CH
  661.           INY
  662.           LDA (TMP),Y
  663.           JSR TABV
  664. MGLP      INY
  665.           LDA (TMP),Y
  666.           BEQ MSG1
  667.           JSR COUT
  668.           BNE MGLP
  669. MSG1      JSR CLREOL
  670.           RTS
  671. *****************************
  672. * SET MEMORY POINTER TO $7000
  673. *****************************
  674. SETCM     LDA #0
  675.           STA CML
  676.           LDA #$70
  677.           STA CMH
  678.           LDA #1
  679.           STA LN
  680.           RTS
  681. ****************
  682. * SAVE VARIABLES
  683. ****************
  684. SAVALL    JSR SAVCSR
  685.           LDA CML
  686.           STA PTRSAV
  687.           LDA CMH
  688.           STA PTRSAV+1
  689.           LDA LN
  690.           STA LNSAV
  691.           RTS
  692. *******************
  693. * RESTORE VARIABLES
  694. *******************
  695. RESALL    JSR RESCSR
  696.           LDA PTRSAV
  697.           STA CML
  698.           LDA PTRSAV+1
  699.           STA CMH
  700.           LDA LNSAV
  701.           STA LN
  702.           RTS
  703. **********************
  704. * SAVE CURSOR SETTINGS
  705. **********************
  706. SAVCSR    LDA CH
  707.           STA CHSAV
  708.           LDA CV
  709.           STA CVSAV
  710.           RTS
  711. *************************
  712. * RESTORE CURSOR SETTINGS
  713. *************************
  714. RESCSR    LDA CHSAV
  715.           STA CH
  716.           LDA CVSAV
  717.           JSR TABV
  718.           RTS
  719. **********************************
  720. * MOVE MEMORY POINTER TO NEXT LINE
  721. **********************************
  722. NXTLN     CLC
  723.           LDA CML
  724.           ADC #40
  725.           BCC NXT1
  726.           INC CMH
  727. NXT1      STA CML
  728.           INC LN
  729.           RTS
  730. **************************************
  731. * MOVE MEMORY POINTER TO PREVIOUS LINE
  732. **************************************
  733. PRELN     SEC
  734.           LDA CML
  735.           SBC #40
  736.           BCS PRE1
  737.           DEC CMH
  738. PRE1      STA CML
  739.           DEC LN
  740.           RTS
  741. ***************************
  742. * SET MEM & CV TO NEXT LINE
  743. ***************************
  744. SETNXTLN  JSR LF
  745.           JSR NXTLN
  746.           RTS
  747. *******************************
  748. * SET MEM & CV TO PREVIOUS LINE
  749. *******************************
  750. SETPRELN  JSR UP
  751.           JSR PRELN
  752.           RTS
  753. ******************************
  754. * GO TO BEGINNING OF NEXT LINE
  755. ******************************
  756. BNXTLN    LDA #0
  757.           STA CH
  758.           JSR SETNXTLN
  759.           RTS
  760. *****************
  761. * SET LINE TO FLN
  762. *****************
  763. SETFLN    JSR SETCM
  764. STLP      LDA LN
  765.           CMP FLN
  766.           BEQ SFN1
  767.           JSR NXTLN
  768.           JMP STLP
  769. SFN1      RTS
  770. ***************
  771. * MAKE NEW LINE
  772. ***************
  773. NEWLN     LDA #0
  774.           LDY #40
  775. NWLP      STA (CML),Y
  776.           DEY
  777.           BPL NWLP
  778.           INC LLN
  779.           RTS
  780. **********************
  781. * FIND END OF DOCUMENT
  782. **********************
  783. FENDOC    JSR SETCM
  784. FENDOC1   LDY #0
  785. FELP      LDA (CML),Y
  786.           BEQ FED1
  787.           JSR NXTLN
  788.           JMP FELP
  789. FED1      RTS
  790. ********************
  791. * SET MEM MOVE START
  792. ********************
  793. SETMMS    JSR NXTLN
  794.           LDA CML
  795.           STA MMS
  796.           LDA CMH
  797.           STA MMS+1
  798.           RTS
  799. ******************
  800. * SET MEM MOVE END
  801. ******************
  802. SETMME    JSR FENDOC
  803. SETMME1   JSR NXTLN
  804.           LDA CML
  805.           STA MME
  806.           LDA CMH
  807.           STA MME+1
  808.           RTS
  809. **************************
  810. * SET MEM MOVE DESTINATION
  811. **************************
  812. SETMMD    LDA CML
  813.           STA MMD
  814.           LDA CMH
  815.           STA MMD+1
  816.           RTS
  817. ***************
  818. * MOVE MEM DOWN
  819. ***************
  820. MOVDN     LDY #0
  821.           JSR MOVE
  822.           RTS
  823. *************
  824. * MOVE MEM UP
  825. *************
  826. MOVUP     LDY #0
  827. MMLP      LDA (MME),Y
  828.           STA (MMD),Y
  829.           LDA MMS        ;--
  830.           CMP MME        ; REACHED START
  831.           LDA MMS+1      ; OF MEMORY
  832.           SBC MME+1      ; FOR MOVE?
  833.           BCS MVP3       ; YES
  834.           LDA MMD
  835.           BNE MVP1
  836.           DEC MMD+1
  837. MVP1      DEC MMD
  838.           LDA MME
  839.           BNE MVP2
  840.           DEC MME+1
  841. MVP2      DEC MME
  842.           JMP MMLP
  843. MVP3      RTS
  844. ***********
  845. * CHECKS #1
  846. ***********
  847. CHECK1    JSR CKLLN      ; LAST LINE?
  848.           BNE CK11       ; NO
  849.           JSR NXTLN
  850.           JSR NEWLN
  851.           JSR PRELN
  852. CK11      JSR CKWINB
  853.           BNE CK12
  854.           INC FLN        ; SCROLL
  855.           JSR PRNTDOC    ; UP
  856.           JSR UP
  857. CK12      RTS
  858. ***********
  859. * CHECKS #2
  860. ***********
  861. CHECK2    LDA #0
  862.           STA TMP
  863.           JSR CKBCSR     ; 0 BEFORE CURSOR?
  864.           BEQ CK21       ; YES
  865.           CMP #$0D       ; CR BEFORE CURSOR?
  866.           BNE CK24       ; NO
  867.           JMP CK23
  868. CK21      LDY CH
  869. CKLP      DEY            ;--
  870.           LDA (CML),Y    ; SWITCH
  871.           BNE CK22       ; SPACES
  872.           JSR STRSPCM    ; FOR 0'S
  873.           CPY #0         ; BEFORE
  874.           BEQ CK24       ; CURSOR
  875.           JMP CKLP       ;--
  876. CK22      CMP #$0D       ; CR BEFORE CURSOR?
  877.           BNE CK24       ; NO
  878. CK23      INC TMP
  879.           JSR STRSPCM    ; STORE SPACE IN MEM
  880. CK24      RTS
  881. *************
  882. * STORE ENTRY
  883. *************
  884. STORENT   LDA KBD
  885.           LDY CH
  886.           STA (CML),Y
  887.           ORA #$80
  888.           JSR COUT
  889.           RTS
  890. ********************
  891. * STORE SPACE IN MEM
  892. ********************
  893. STRSPCM   LDA #$20
  894.           STA (CML),Y
  895.           RTS
  896. *******************
  897. * STORE ZERO IN MEM
  898. *******************
  899. STOR0M    LDA #0
  900.           STA (CML),Y
  901.           RTS
  902. ***************************
  903. * PRINT CHARACTER TO SCREEN
  904. ***************************
  905. PRCHAR    LDA (CML),Y
  906.           BEQ PRC1
  907.           CMP #$0D
  908.           BNE PRC2
  909.           LDA CRSF
  910.           BEQ PRC1
  911.           LDA #$2A       ; INVERSE ASTERISK
  912.           JMP PRC3
  913. PRC1      LDA #$20
  914. PRC2      ORA #$80
  915. PRC3      STA (BASL),Y
  916.           RTS
  917. ****************************
  918. * PRINT 20 LINES OF DOCUMENT
  919. ****************************
  920. PRNTDOC   JSR SAVALL
  921. PRNTDOC1  JSR SETFLN
  922.           LDA #2
  923.           JSR TABV
  924. PDLP1     LDY #39        ;--
  925. PDLP2     JSR PRCHAR     ; PRINT
  926.           DEY            ; ONE
  927.           BPL PDLP2      ; LINE
  928.           LDA LN
  929.           CMP LLN        ; LAST LINE?
  930.           BEQ PD1        ; YES
  931.           LDA CV
  932.           CMP #21        ; OR BOTTOM OF WINDOW?
  933.           BEQ PD1        ; YES
  934.           JSR SETNXTLN   ; MOVE TO NEXT LINE
  935.           JMP PDLP1      ; AND PRINT IT
  936. PD1       JSR RESALL
  937.           RTS
  938. **********************
  939. * PRINT LINE & COL #'S
  940. **********************
  941. PRNTLC    JSR SAVCSR
  942.           LDA #MSGLC     ; PRINT
  943.           LDX #MSGLC/    ; LINE/COLUMN
  944.           JSR MESSAGE    ; MESSAGE
  945.           LDA #5         ;
  946.           STA CH         ; PRINT NEW
  947.           LDA #0         ; LINE NUMBER
  948.           LDX LN         ; MSB-ACC
  949.           JSR OUTNUM     ; LSB-X
  950.           LDA #17        ;--
  951.           STA CH         ; PRINT NEW
  952.           LDA #0         ; COLUMN
  953.           LDX CHSAV      ; NUMBER
  954.           INX            ;
  955.           JSR OUTNUM     ;--
  956.           JSR RESCSR
  957.           RTS
  958. ************************
  959. * VARIOUS CHECKS & TESTS
  960. ************************
  961. CKELN     LDY CH
  962.           CPY #39
  963.           RTS
  964. *
  965. CK0BLN    LDY #0
  966.           LDA (CML),Y
  967.           RTS
  968. *
  969. CK0ELN    LDY #39
  970.           LDA (CML),Y
  971.           RTS
  972. *
  973. CKBCSR    LDY CH
  974.           DEY
  975.           LDA (CML),Y
  976.           RTS
  977. *
  978. CKUCSR    LDY CH
  979.           LDA (CML),Y
  980.           RTS
  981. *
  982. CKACSR    LDY CH
  983.           INY
  984.           LDA (CML),Y
  985.           RTS
  986. *
  987. CKNXTLN0  LDY #40
  988.           LDA (CML),Y
  989.           RTS
  990. *
  991. CKLN1     LDA LN
  992.           CMP #1
  993.           RTS
  994. *
  995. CKFLN     LDA LN
  996.           CMP FLN
  997.           RTS
  998. *
  999. CKLLN     LDA LN
  1000.           CMP LLN
  1001.           RTS
  1002. *
  1003. CKLMT     LDA LN
  1004.           CMP #241
  1005.           RTS
  1006. *
  1007. CKFDOC    LDA LLN
  1008.           CMP #241
  1009.           RTS
  1010. *
  1011. CKWINT    LDA CV
  1012.           CMP #2
  1013.           RTS
  1014. *
  1015. CKWINB    LDA CV
  1016.           CMP #21
  1017.           RTS
  1018. *
  1019. CKSPCK    LDA KBD
  1020.           CMP #$20
  1021.           RTS
  1022. *
  1023. CKSPCM    LDA (CML),Y
  1024.           CMP #$20
  1025.           RTS
  1026. *
  1027. CKCRM     LDA (CML),Y
  1028.           CMP #$0D
  1029.           RTS
  1030. *****************************
  1031. * GET WORD LENGTH FOR WRAP UP
  1032. *****************************
  1033. CHKWRD    JSR COUNT0
  1034.           JSR NXTLN
  1035.           LDY #0         ;--
  1036.           LDX #0         ;
  1037.           LDA (CML),Y    ;
  1038.           CMP #$20       ; GET LENGTH
  1039.           BEQ CKW1       ;
  1040.           CMP #$0D       ; OF FIRST
  1041.           BEQ CKW1       ;
  1042. CWLP1     INY            ; WORD
  1043.           LDA (CML),Y    ;
  1044.           BEQ CKW1       ; ON LINE
  1045.           CMP #$0D       ;
  1046.           BEQ CKW1       ;
  1047.           CMP #$20       ;
  1048.           BNE CWLP1      ;
  1049. CKW1      INY            ;
  1050.           STY WRDLEN     ;--
  1051.           SEC            ; COMPARE TO
  1052.           CPY LEN0       ; LENGTH OF 0'S
  1053.           BEQ CKW2       ; EQUAL
  1054.           INX
  1055.           DEY
  1056.           BCC CWLP1      ; SHORTER
  1057.           CPX #1         ; FIRST WORD?
  1058.           BNE CWLP2      ; NO
  1059.           INC STOPF
  1060.           BNE CKW2
  1061. CWLP2     DEY            ;--
  1062.           JSR CKSPCM     ; STRIP OFF
  1063.           BNE CWLP2      ; A WORD
  1064.           INY            ;
  1065.           STY WRDLEN     ;--
  1066. CKW2      JSR PRELN
  1067.           RTS
  1068. ***********************************
  1069. * GET LENGTH OF WORD AT END OF LINE
  1070. ***********************************
  1071. GETWRDLN  LDX #0
  1072.           JSR CK0ELN
  1073.           CMP #$0D       ; CHECK FOR
  1074.           BNE GWLP1      ; CR IN
  1075.           INC CRF        ; WORD
  1076. GWLP1     CPY #0
  1077.           BEQ GTW1
  1078.           DEY
  1079.           INX
  1080.           JSR CKSPCM
  1081.           BNE GWLP1
  1082.           STX WRDLEN
  1083.           RTS
  1084. GTW1      LDA #1
  1085.           STA WRDLEN
  1086.           RTS
  1087. ********************************
  1088. * GET LENGTH FROM CH TO END LINE
  1089. ********************************
  1090. GTWRDLN1  SEC
  1091.           LDA #40
  1092.           SBC CH
  1093.           STA WRDLEN
  1094.           RTS
  1095. **************
  1096. * MOVE WORD UP
  1097. **************
  1098. MOVWRDUP  SEC
  1099.           LDA #40
  1100.           STA YHI
  1101.           SBC LEN0
  1102.           STA YLO
  1103.           LDX WRDLEN
  1104. MULP      LDY YHI
  1105.           LDA (CML),Y
  1106.           LDY YLO
  1107.           STA (CML),Y
  1108.           INC YLO
  1109.           INC YHI
  1110.           DEX
  1111.           BNE MULP
  1112.           RTS
  1113. ****************
  1114. * MOVE WORD DOWN
  1115. ****************
  1116. MOVWRDN   SEC
  1117.           LDA #40
  1118.           STA YHI
  1119.           SBC WRDLEN
  1120.           STA YLO
  1121. MDLP1     LDY YLO
  1122.           LDA (CML),Y
  1123.           BEQ MWD1
  1124.           LDY YHI
  1125.           STA (CML),Y
  1126.           INC YHI
  1127.           LDY YLO
  1128.           JSR STOR0M
  1129.           INY
  1130.           STY YLO
  1131.           CPY #40
  1132.           BNE MDLP1
  1133. MWD1      RTS
  1134. *******************
  1135. * MOVE LINE TO LEFT
  1136. *******************
  1137. MOVLNL    LDY WRDLEN
  1138.           STY YHI
  1139.           LDY #0
  1140.           STY YLO
  1141.           LDY YHI
  1142.           LDA (CML),Y
  1143.           BNE MLLP1
  1144.           INC CRF        ; IF CR IN WORD MOVED
  1145. MLLP1     LDY YHI
  1146.           LDA (CML),Y
  1147.           LDY YLO
  1148.           STA (CML),Y
  1149.           CMP #$0D       ; CHECK FOR
  1150.           BNE MLL1       ; CR IN
  1151.           INC STOPF      ; LINE
  1152. MLL1      INC YLO
  1153.           INC YHI
  1154.           LDY YHI
  1155.           CPY #40
  1156.           BNE MLLP1
  1157.           LDY YLO
  1158. MLLP2     JSR STOR0M     ; FILL REST
  1159.           INY            ; OF LINE
  1160.           CPY #40        ; WITH 0'S
  1161.           BNE MLLP2
  1162.           RTS
  1163. *******************
  1164. * MOVE LINE RIGHT 1
  1165. *******************
  1166. MOVLNR1   LDY #39
  1167. MRLP      DEY
  1168.           LDA (CML),Y
  1169.           INY
  1170.           STA (CML),Y
  1171.           DEY
  1172.           CPY CH
  1173.           BNE MRLP
  1174.           RTS
  1175. *******************
  1176. * MAKE A BLANK LINE
  1177. *******************
  1178. MBLANKLN  JSR SAVALL
  1179.           JSR SETMMS     ;--
  1180.           JSR SETMME     ; SET MEMORY
  1181.           JSR NXTLN      ; POINTERS AND
  1182.           JSR SETMMD     ; MOVE MEMORY
  1183.           JSR MOVUP      ;--
  1184.           JSR RESALL
  1185.           JSR NXTLN      ; FILL NEW LINE
  1186.           JSR LINE0      ; WITH 0'S
  1187.           INC LLN
  1188.           JSR RESALL
  1189.           RTS
  1190. **********************
  1191. * CHECK FOR CR ON LINE
  1192. **********************
  1193. CHKCR     LDY #0
  1194. CKRLP     JSR CKCRM
  1195.           BNE CKR1
  1196.           INC CRF
  1197. CKR1      INY
  1198.           CPY #40
  1199.           BNE CKRLP
  1200.           RTS
  1201. **********************************
  1202. * GET LENGTH OF 0'S AT END OF LINE
  1203. **********************************
  1204. COUNT0    LDY #40
  1205.           LDX #$FF
  1206. CTLP      DEY
  1207.           INX
  1208.           LDA (CML),Y
  1209.           BEQ CTLP
  1210.           STX LEN0
  1211.           RTS
  1212. ********************
  1213. * FILL LINE WITH 0'S
  1214. ********************
  1215. LINE0     LDY #39
  1216. L0LP      JSR STOR0M
  1217.           DEY
  1218.           BPL L0LP
  1219.           RTS
  1220. ***************************
  1221. * PRINT DOCUMENT TO PRINTER
  1222. ***************************
  1223. PPRINT    JSR SETCM
  1224.           LDA #0
  1225.           STA STOPF
  1226.           JSR PAUSE
  1227.           LDA STOPF
  1228.           BEQ PPR1
  1229.           JMP PRTN1
  1230. PPR1      JSR PRNTLM
  1231.           LDY #0
  1232.           STY CRF
  1233.           STY PPOS
  1234.           DEY
  1235.           LDA STROBE
  1236. NXTWRD    LDA KBD        ;--
  1237.           BPL PPR2       ; ESCAPE KEY
  1238.           CMP #$9B       ; PRESSED?
  1239.           BNE PPR2       ;--
  1240.           JMP PRTN       ; YES
  1241. PPR2      LDA STROBE
  1242.           LDX #0
  1243. PPLP1     INX
  1244. PPLP2     INY
  1245.           CPY #40        ; END OF LINE?
  1246.           BNE PPR3       ; NO
  1247.           LDA (CML),Y    ; END OF DOCUMENT?
  1248.           BEQ PRTN       ; YES
  1249.           JSR NXTLN      ; MOVE MEM PTR
  1250.           DEC LN         ; RESET LINE
  1251.           LDY #0         ; RESET Y
  1252. PPR3      LDA (CML),Y
  1253.           BEQ PPLP2      ; IF 0, MOVE ON
  1254.           INC PPOS
  1255.           LDA PPOS
  1256.           CMP RM         ; RIGHT MARGIN?
  1257.           BNE PPR4       ; NO
  1258.           INC CRF        ; SET CR FLAG
  1259. PPR4      LDA (CML),Y
  1260.           CMP #$0D       ; CHARACTER CR?
  1261.           BEQ PPR5       ; YES
  1262.           CMP #$20       ; CHAR SPACE?
  1263.           BNE PPLP1      ; NO
  1264. PPR5      STX WRDLEN
  1265.           LDA CRF        ; CR FLAG SET?
  1266.           BEQ PWRD       ; NO
  1267.           STY YSAV1
  1268.           LDA #$0D
  1269.           JSR PGEND
  1270.           LDA STOPF
  1271.           BNE PRTN1
  1272.           JSR PRNTLM     ; PRINT LEFT MARGIN
  1273.           LDY #0
  1274.           STY CRF        ; RESET CR FLAG
  1275.           LDY WRDLEN     ; WRDLEN
  1276.           STY PPOS       ; & PPOS
  1277.           LDY YSAV1      ; RESTORE Y
  1278. PWRD      LDX #0
  1279.           INY
  1280.           SEC            ; RESET Y TO
  1281.           TYA            ;
  1282.           SBC WRDLEN     ; START OF WORD
  1283.           TAY
  1284.           DEY
  1285. PPLP3     INX
  1286.           INY
  1287.           LDA (CML),Y
  1288.           STY YSAV1
  1289.           CMP #$0D       ; CR?
  1290.           BNE PPR6       ; NO
  1291.           JSR PGEND
  1292.           LDA STOPF
  1293.           BNE PRTN1
  1294.           JSR PRNTLM
  1295.           LDY #0
  1296.           STY PPOS       ; RESET PPOS
  1297.           JMP PPR7
  1298. PPR6      ORA #$80       ; PRINT CHARACTER
  1299.           JSR COUT
  1300. PPR7      LDY YSAV1      ; RESTORE Y
  1301.           CPX WRDLEN     ; END OF WORD?
  1302.           BNE PPLP3      ; NO
  1303.           JMP NXTWRD     ; GET NEXT WORD
  1304. PRTN      LDA #$8C       ; FORM FEED
  1305.           JSR COUT
  1306. PRTN1     RTS
  1307. * END OF PAGE?
  1308. PGEND     ORA #$80       ; PRINT CR
  1309.           JSR COUT
  1310.           INC LN
  1311.           LDA LN
  1312.           CMP BM         ; BOTTOM MARGIN?
  1313.           BNE PGD1       ; NO
  1314.           LDA #$0C
  1315.           JSR COUT
  1316.           LDA #0
  1317.           STA LN
  1318.           JSR PAUSE
  1319. PGD1      RTS
  1320. ****************
  1321. * SET TOP MARGIN
  1322. ****************
  1323. SETTM     LDA #$8D       ; CR
  1324.           JSR COUT
  1325.           INC LN
  1326.           LDA LN
  1327.           CMP TM
  1328.           BCC SETTM
  1329.           RTS
  1330. *********************
  1331. * PAUSE TO LOAD PAPER
  1332. *********************
  1333. PAUSE     LDA #30
  1334.           STA CH
  1335.           LDA #9
  1336.           JSR TABV
  1337. PAUSE1    JSR KEYIN
  1338.           CMP #$9B
  1339.           BNE PSE1
  1340.           INC STOPF
  1341.           RTS
  1342. PSE1      CMP #$A0
  1343.           BNE PAUSE1
  1344.           JSR SETTM
  1345.           RTS
  1346. *******************
  1347. * PRINT LEFT MARGIN
  1348. *******************
  1349. PRNTLM    LDA #$A0
  1350.           LDY LM
  1351. LMLP      JSR COUT
  1352.           DEY
  1353.           BNE LMLP
  1354.           RTS
  1355. ***************************
  1356. * COMMAND CODES & ADDRESSES
  1357. ***************************
  1358. CMDCODE   DFC $85,$9B,$95,$88,$8A,$8B,$89
  1359.           DFC $86,$83,$8C,$99,$9A,$8D,$84,$FF
  1360. CMDADR    DFC CHGCSR,CHGCSR/
  1361.           DFC ESC,ESC/
  1362.           DFC RARR,RARR/
  1363.           DFC LARR,LARR/
  1364.           DFC DNARR,DNARR/
  1365.           DFC UPARR,UPARR/
  1366.           DFC TAB,TAB/
  1367.           DFC FRSTLN,FRSTLN/
  1368.           DFC CNTRLN,CNTRLN/
  1369.           DFC LASTLN,LASTLN/
  1370.           DFC CLEAREOL,CLEAREOL/
  1371.           DFC SHOWCR,SHOWCR/
  1372.           DFC RTN,RTN/
  1373.           DFC DELETE,DELETE/
  1374.           DFC DELETE,DELETE/
  1375. ***************************
  1376. * VARIOUS FLAGS & REGISTERS
  1377. ***************************
  1378. IMODE     DFC 0
  1379. CRF       DFC 0
  1380. CRSF      DFC 0
  1381. STOPF     DFC 0
  1382. LEN0      DFC 0
  1383. WRDLEN    DFC 0
  1384. FLN       DFC 1
  1385. LLN       DFC 1
  1386. CHSAV     DFC 0
  1387. CVSAV     DFC 0
  1388. LNSAV     DFC 0
  1389. YSAV      DFC 0
  1390. YSAV1     DFC 0
  1391. PTRSAV    DFS 2
  1392. ****************
  1393. * ESCAPE MESSAGE
  1394. ****************
  1395. ESCMSG    DFC 22,0
  1396.           ASC "ESCAPE: MAIN MENU"
  1397.           DFC 0
  1398. *********************
  1399. * LINE/COLUMN MESSAGE
  1400. *********************
  1401. MSGLC     DFC 0,23
  1402.           ASC "LINE      COLUMN"
  1403.           DFC 0
  1404.